home *** CD-ROM | disk | FTP | other *** search
/ Network Supervisor's Toolkit / Network Supervisor's Toolkit.iso / novell / pdsoct / pdsbul.oct
Text File  |  1996-07-10  |  42KB  |  1,092 lines

  1. OCTOBER 1990 BULLETS
  2.  
  3. MAD's COLUMN
  4.  
  5. Hello and welcome to the October edition of BULLETS!
  6.  
  7. There are several items in this month's BULLETS to which I would like to
  8. draw your attention. First of all, Novell has begun shipping version 2.11
  9. of XQL and NetWare SQL.
  10.  
  11. We have also released a new version of the NetWare C Interface, as well as
  12. a new version of the C Network Compiler, now renamed Network C for DOS
  13. v2.0. You will find descriptions and a list of enhancements for both of
  14. these new products on page nine.
  15.  
  16. Finally, the past weeks have seen the release of two new Btrieve products:
  17. Btrieve for Windows, and a new version of Btrieve for OS/2. In this edition
  18. of BULLETS, you will find an article to help you get started using Btrieve
  19. for Windows as well as some information on enhancements and changes made to
  20. the new OS/2 Btrieve DLL.
  21.  
  22. You can receive information about upgrades for each of these products by
  23. calling 1-800-RED WORD or (512) 346-8380. 
  24.  
  25. Happy_Programming!
  26.  
  27. Mad Poarch
  28. Director of Developer
  29. Support/Services
  30.  
  31.  
  32. Article:  Xtrieving Btrieve
  33.  
  34. Xtrieve PLUS is a menu driven data retrieval system with a flexible report
  35. writer. It is designed to work in conjunction with both Btrieve and
  36. XQL/NetWare SQL applications, allowing users to catalog, retrieve, analyze,
  37. and update the information in Btrieve files. This article explains how to
  38. use Xtrieve PLUS to access existing Btrieve files.
  39.  
  40. Your physical files are actually Btrieve files, created by Xtrieve PLUS or
  41. by any other Btrieve or XQL application. Xtrieve PLUS uses a data
  42. dic-tionary which contains precise descriptive information about every data
  43. field and every index for the Btrieve file. Before Xtrieve PLUS can
  44. recognize the data in your existing Btrieve file, you must add a definition
  45. to the Xtrieve PLUS dictionary which corresponds to the format of the data
  46. in the Btrieve file.
  47.  
  48. In order to define a file to Xtrieve PLUS■s dictionary, you must first
  49. prepare or obtain a list of all the fields in your Btrieve file in the
  50. order in which they are stored in the data record, along with the data type
  51. and length of each field. You must also know which of these fields are
  52. defined as indexes (or keys).
  53.  
  54. Information about indexes can be obtained by executing a "BUTIL -stat
  55. <filename.btr>" command for your Btrieve file. Still, it is important to
  56. remember that the precise characteristics of all other fields in the file
  57. must be obtained from whomever originally defined or developed the
  58. application using that file.
  59.  
  60. Once you have this information, the process of defining a file to Xtrieve
  61. PLUS's dictionary is fairly simple. From the main Xtrieve PLUS menu, you
  62. should select the Dictionary option, and from there, the Define option. You
  63. will first be asked for the Location Name; this should be the full drive,
  64. path and filename (with extension) of the existing Btrieve data file. The
  65. drive and pathname are optional and are not necessary if the data file is
  66. in the current directory. Next, you will be prompted to supply a
  67. Descriptive Filename. This is the tablename used within Xtrieve PLUS that
  68. will appear on menus whenever you need to access the specific file.
  69.  
  70. Now you are ready to define the fields within the file. Be sure to define
  71. the fields to correspond exactly to the data in the Btrieve file. After
  72. completing this step, press the <ESC> key and you will be shown a menu that
  73. includes options allowing you to:
  74.  
  75.  -    modify these field definitions
  76.  -    continue adding or editing the fields already entered
  77.  -    remove any fields already entered
  78.  -    insert a new field in any position.
  79.  
  80. Select Complete from this menu when all the fields have been successfully
  81. entered. You must next define the indexes for the file. Again, be sure to
  82. select the fields to correspond exactly to the indexes already defined in
  83. the existing Btrieve file. When you have finished defining the indexes,
  84. press the <ESC> key and select Complete from the menu.
  85.  
  86. You should now see the File Definition Menu, from which you should select
  87. the Finished-Don■t Create option. This instructs Xtrieve PLUS to add the
  88. file definition to the data dictionary, but not to create the specified
  89. Btrieve file (remember: a Btrieve Create operation creates a new, empty
  90. Btrieve file). It is very important that you DO NOT select the
  91. Finished-Create option, because if you do you will wipe out all data in
  92. your existing Btrieve file. You would use the Finished-Create option only
  93. if the data file did not already exist or if you specifically wanted to
  94. clear out any data already in the data file.
  95.  
  96. You now have all the functionality of Xtrieve PLUS available for use on the
  97. data you■ve collected in your Btrieve file, including browsing your data,
  98. editing, sorting, adding new data, adding supplemental indexes, and writing
  99. reports. Good luck and have fun!
  100.  
  101.  
  102. Article:  Using Btrieve for Windows
  103.  
  104. Btrieve for Windows v.5.10 was released September 4, 1990 to give Windows
  105. application developers access to the Btrieve Record Manager and the
  106. thousands of Btrieve databases currently installed worldwide. This article
  107. will examine two issues which concern developers using Btrieve for Windows:
  108.  
  109.  o    How to initialize Btrieve.
  110.  o    How to make calls to Btrieve.
  111.  o    How to make calls to type Btrieve.
  112.  
  113. Initializing Btrieve for Windows
  114.  
  115. There are three ways to initialize Btrieve for Windows.
  116.  
  117.  1.  Use the default values. With this method, no special initialization
  118.      procedures need to be done.
  119.  
  120.  2.  Use the WIN.INI file. Create a section in the file that looks like
  121.      this:
  122.  
  123.      [btrieve]
  124.      options=/m:40 /p:=4096 /b:20
  125.      tracefile=btrvtr (specify tracefile name)
  126.  
  127. Here, the options syntax is identical to that for the Btrieve for DOS
  128. Networks version. Also an additional tracefile option can be specified:
  129.  
  130.      traceops=0 1 19 20 21
  131.  
  132. This tracks the Btrieve operations and results and can be used to limit
  133. trace operations.
  134.  
  135.  3.  Use the initialization routine BTRVINIT(). This routine can be found
  136.      in the interface file. The parameter syntax is the same.  (e.g. the
  137.      page size parameter is specified /p:4096.)
  138.  
  139. To use BTRVINIT, set up a char far pointer. To do this you would declare:
  140.  
  141.      char far *btrparm="/m:40 /p:4096";
  142.  
  143. The call would then be:
  144.  
  145.      BTRVINIT(btrparm);
  146.  
  147. A description of the tracefile option and documentation on each of these
  148. methods of initialization are available on CompuServe in NOVC LIB 16 under
  149. the file name WBTREX.ZIP.
  150.  
  151. Calling Btrieve for Windows
  152.  
  153. In Btrieve for Windows, there are two options for making calls to Btrieve.
  154. One method is to use the standard DOS, six-parameter format:
  155.  
  156.      BTRV(operation,
  157.      pos_block,
  158.      data_buffer,
  159.      data_buffer_length,
  160.      key_buffer,
  161.      key_number);
  162.  
  163. Please take note that the interface uses all capital letters to place the
  164. Btrieve call. Some "C" Btrieve for DOS interfaces use the lower case
  165. convention to make the call. It is also important to remember that all the
  166. pointers need to be far pointers. This means:
  167.  
  168.  o    the position block must be defined as
  169.      char far pos_block[128]
  170.  o    the data buffer must be defined as
  171.      char far *data_buffer
  172.  o    the data buffer length must be defined as
  173.      unsigned far *data_buffer_length
  174.  o    the key buffer must be defined as
  175.      char far *key_buffer.
  176.  
  177. For example, if your customer is passing &structure for the data buffer,
  178. then he would type cast the structure as a far char * in the call to
  179. Btrieve.
  180.  
  181.  BTRV(opcode,
  182.         posblk,
  183.         (char far *)&structure,
  184.         et cetera).
  185.  
  186. If you choose to use BTRV(six parameters), then you will need to use the
  187. WBTRVINTF.C interface, which is on the Btrieve for Windows diskette.
  188. Whether or not you choose to use it in this way, you should take a quick
  189. look at it and take note of the way the far pointers are declared and how
  190. the interface passes control to WBTRCALL.DLL.
  191.  
  192. Another method of calling Btrieve for Windows is to call BTRCALL().  This
  193. method requires seven parameters:
  194.  
  195.  BTRCALL(int opcode,
  196.  (char far *) position_block,
  197.  (char far *) data_buffer,
  198.  (unsigned far *)
  199.       data_buffer_length,
  200.  (char far *) key_buffer,
  201.  (unsigned char)
  202.       key_buffer_length,
  203.       int key_path );
  204.  
  205. The added parameter is the key length. This parameter is always set to 255
  206. by the interface. The best documentation on this can be found by looking at
  207. the interface file and reviewing the call to BTRCALL in the BTRV routine.
  208.  
  209. You can find example code for Btrieve for Windows in the file WBTREX.ARC on
  210. CompuServe in NOVA LIB 16, where it will remain until mid-December. After
  211. that the file will be moved to NOVA LIB 5. If you have additional questions
  212. concerning Btrieve for Windows, please contact the Developer Support Group
  213. at Novell Austin or your local Novell office.
  214.  
  215.  
  216. Article: Using the APIs to Take Advantage of TTS
  217.  
  218. Transaction Tracking System (TTS) is a data integrity tool available
  219. forAdvanced and SFT NetWare. TTS guarantees that either all file updates
  220. within a given transaction will be written to disk or none of them will be.
  221. If all the updates cannot be completed for some reason, then the
  222. successfully completed updates are "backed out." This article will provide
  223. the information needed to program with TTS, discussing the different
  224. varieties of transaction tracking, and outlining the ways that you can
  225. control when a transaction begins and ends.
  226.  
  227. Before using TTS in a program, you must take care of some housekeeping
  228. chores. First, install TTS on the server which you will be using. Next,
  229. flag the file which you have chosen to monitor as transactional, using
  230. either the flag utility or the SetExtendedFile-Attributes call. Using the
  231. call TTSIsAvailable, your program can check to make sure TTS is installed
  232. and active.  This function will return a 1 if TTS is installed and a 0 if
  233. it is not.
  234.  
  235. Any code that will use TTS will use the following steps:
  236.  
  237.  1.   Start the transaction.
  238.  2.   Execute any and all updates.
  239.  3.   End or abort the transaction.
  240.  
  241. Implicit Transaction Tracking
  242.  
  243. Implicit transaction tracking is designed to be transparent to the user.
  244. The start transaction takes place anytime the application locks a record in
  245. a file that is marked transactional.
  246.  
  247. There are various APIs in the synchronization services for locking records
  248. in files, but the standard locking calls available with DOS version 3.1 and
  249. greater will also work. The "lock threshold", or number of locks which must
  250. be made to indicate a Begin Transaction, defaults to 0, which means that
  251. the first lock will begin a transaction. When necessary, you can examine or
  252. change the "lock threshold" by using either the TTSGetApplicationThresholds
  253. call or the TTSGetWorkstation-Thresholds call. The transaction is ended
  254. when the number of locks falls below the threshold.
  255.  
  256. Explicit Transaction Tracking
  257.  
  258. Explicit transaction tracking is a more visible process and, therefore, is
  259. easier to apply. Some calls, such as TTSBeginTransaction and
  260. TTSEndTransaction, need very little explanation. However some calls need a
  261. little more explanation. For instance, if you need to abort a transaction
  262. and force a rollback for some reason, you would call TTSAbort-Transaction,
  263. rather than TTSEndTransaction.
  264.  
  265. The server caches incoming requests, so it may take 3 to 5 seconds before a
  266. transaction is actually written to disk. Because of this, you may need to
  267. verify that the transaction has actually been written by calling
  268. TTSTransactionStatus and passing it the transaction number returned by
  269. TTSEndTrans-action. This function can be called repeatedly until it
  270. successfully returns.
  271. If an implicit transaction is in effect when you issue a
  272. TTSBeginTransaction, then it is converted into an explicit transaction. If
  273. the "lock threshold" is exceeded when the call TTSEndTransaction is issued,
  274. then the explicit transaction will end and an implicit transaction will
  275. begin.
  276.  
  277. Following is a simple program that demonstrates how to use record locking
  278. to activate implicit transaction tracking. If you have additional questions
  279. about TTS, please contact the Developer Support Group at Novell Austin or
  280. your local Novell office.
  281.  
  282. /* This application was compiled with Turbo C in NetWare 386. */
  283.  
  284.  #include <stdio.h>
  285.  #include <stdlib.h>
  286.  #include <nit.h>
  287.  #include <fcntl.h>
  288.  #include <share.h>
  289.  
  290.  int f1;
  291.  int f2;
  292.  
  293. /*   This function will check to see if the file is flagged transactional.
  294. If not, it will flag it as such. */
  295.  
  296.  VerifyTTSFlag(char *filname)
  297.  {
  298.       BYTE extendedFileAttributes;
  299.  GetExtendedFileAttributes(filname,
  300.       &extendedFileAttributes);
  301.  if (!(extendedFileAttributes & 0x16))
  302.       {
  303.       /* set the transactional bit of the
  304.            extended attributes if not set */
  305.       extendedFileAttributes += 0x16;
  306.       SetExtendedFileAttributes(filname,
  307.            extendedFileAttributes);
  308.       }
  309.  }
  310.  
  311.  void read60bytes(int filnum,char *buff)
  312.  {
  313.  lseek(filnum,0L,SEEK_SET);
  314.  read(filnum,buff,60);
  315.  }
  316.  
  317.  void write60bytes(int filnum,char *buff)
  318.  {
  319.  lseek(filnum,0L,SEEK_SET);
  320.  write(filnum,buff,60);
  321.  }
  322.  
  323.  void main(int argc, char **argv)
  324.  {
  325.  int ret;
  326.  char ans;
  327.  long transactionNumber;
  328.  char buff1[80];
  329.  char buff2[80];
  330.  buff1[60]=0x00;
  331.  buff2[60]=0x00;
  332.  
  333.  /* checking to see if TTS is available */
  334.  if (TTSIsAvailable()== 1)
  335.       printf("\n TTS is available");
  336.  
  337.  /*   If files are not flagged as transactional,
  338.       flag them */   VerifyTTSFlag("sys:orm/tts/tstfile1");
  339.  VerifyTTSFlag("sys:orm/tts/tstfile2");
  340.  
  341.  
  342.  f1=open("tstfile1",O_RDWR);
  343.  f2=open("tstfile2",O_RDWR);
  344.  
  345.  
  346.  /* Begin the transaction */
  347.  ret=TTSBeginTransaction();
  348.  printf("\nbegin transaction %d",ret);
  349.  
  350.  read60bytes(f1,buff1);
  351.  read60bytes(f2,buff2);
  352.  printf("\n%s",buff1);
  353.  printf("\n%s",buff2);
  354.  
  355.  /*   This code just alters the record so we 
  356.       can see if the transaction is aborted or
  357.       not. */
  358.  
  359.  if (buff1[0]=="*")
  360.       memset(buff1,"x",60);
  361.  else
  362.       memset(buff1,"*",60);
  363.  
  364.  write60bytes(f1,buff1);
  365.  
  366.  if (buff2[0]=="*")
  367.       memset(buff2,"x",60);
  368.  else
  369.       memset(buff2,"*",60);
  370.  
  371.  write60bytes(f2,buff2);
  372.  
  373.  if (!strcmp("UPDATE",argv[1]))
  374.       {
  375.       ret=TTSEndTransaction(&transactionNumber);
  376.       printf("\n ending the transaction %d ",
  377.  ret);
  378.       printf("\n Transaction number %ld",
  379.            transactionNumber);
  380.       while (TTSTransactionStatus
  381.            (transactionNumber))
  382.                 printf(".");
  383.       }
  384.  else
  385.       {
  386.       ret=TTSAbortTransaction();
  387.       printf("\n aborting the transaction %d",
  388.            ret);
  389.       }
  390.  
  391.  setmem(buff1,"-",60);
  392.  setmem(buff2,"-",60);
  393.  
  394.  read60bytes(f1,buff1);
  395.  read60bytes(f2,buff2);
  396.  
  397.  printf("\n%s",buff1);
  398.  printf("\n%s",buff2);
  399.  
  400.  }
  401.  
  402.  
  403.  Technical Insights:
  404.  New Features of the OS/2 Btrieve Dynamic Link Library
  405.  
  406. The OS/2 Btrieve DLL has some exciting new features.
  407.  
  408. Dynamic Initialization:
  409.  
  410. The same API that is used with Btrieve for Windows is used for the OS/2
  411. DLL. The application can make a call to BTRVINIT () to initialize the DLL
  412. instead of requiring the end-user to set the BTRPARMS environment variable.
  413.  
  414. Dynamic Reinitialization:
  415.  
  416. As in Btrieve for Windows, you can reinitialize Btrieve if all files have
  417. been closed, all transactions have been completed, and the BTRVSTOP()
  418. function has been called successfully.
  419.  
  420. The BTRVSTOP() must be issued and it must be successful. If this function
  421. is unsuccessful, memory will be held for previous tasks and they will not
  422. be removed from the task table. If a non-zero status is returned from
  423. BTRVSTOP(), then there are files that have been left open and the
  424. application must close the files. The occurrence of a status 1013, which is
  425. undocumented, means that there are too many tasks running and the
  426. application most likely did not issue a BTRVSTOP() successfully.
  427.  
  428. Parameter Validation
  429.  
  430. By setting an environment variable, the developer can isolate bugs caused
  431. by passing invalid pointers to Btrieve. To set the environment variable,
  432. issue the following command:
  433. SET BTRPARMSCHK=YES
  434.  
  435. Once this variable is set, Btrieve will validate the pointer parameters
  436. passed in for READ/WRITE access over certain ranges. The position block
  437. pointer is validated over a range of 128 bytes, the data length pointer
  438. over 2 bytes (it only points to an integer), the data buffer is validated
  439. over the specified data length, and the key buffer is validated over 255
  440. bytes.
  441.  
  442. If an invalid pointer is found, Btrieve will not process the operation and
  443. will instead return a status 1015. 
  444.  
  445.  o    BUTIL now works with 32K records. The previous limit was 16K.
  446.  
  447.  o   The BROLLFWD program is now a "family application" and can run in
  448.      either OS/2 or DOS.
  449.  
  450.  o   BROLLFWD now supports 64K records. The previous DOS version of
  451.      BROLLFWD supported a maximum record lengths of 32K.
  452.  
  453.  o   The default record size used is 8K. If the user has records larger
  454.      than this, they must start BROLLFWD with a "/d:XX" option where XX is
  455.      between 1 and 64, and they must round up their largest record size to
  456.      the next multiple of 1024.
  457.  
  458.  
  459. Technical Insights: When to Load BROUTER
  460.  
  461. BROUTER.VAP is only needed if the server is going to be running other VAPs
  462. making Btrieve calls, like NW$SQL.VP0 (NetWare SQL). In the NLM
  463. environment, the same thing is true; BROUTER.NLM is only needed if another
  464. NLM (such as NetWare SQL) is going to access Btrieve.
  465.  
  466. In multiple NetWare server environments, if you want to have Btrieve files
  467. on multiple servers and access these files through NetWare SQL, then your
  468. servers should be configured as illustrated in Figure 1.
  469.  
  470. Notice that BROUTER is only needed on the server that is running NetWare
  471. SQL.  It will intercept all Btrieve calls and pass them to the server that
  472. contains the Btrieve file. In this regard, BROUTER works very much like
  473. BREQUEST.
  474.  
  475. If BROUTER.VAP is loaded and not needed, there are two ways to remove it:
  476.  
  477.  1.  To remove BSERVER.VAP and BROUTER.VAP from the system directory on the
  478.      server, wait until no one is using the Btrieve VAP. Use the BSETUP
  479.      command and select "Remove." Then, select Install and reply "NO" to
  480.      the question where it asks "Load BROUTER?" Once again, do NOT install
  481.      if people are on the system accessing Btrieve. Doing so will break
  482.      their connection with Btrieve.
  483.  
  484.  2.  In the SYSTEM directory, change the flag for BROUTER.VAP from READ
  485.      ONLY to READ/WRITE, then rename the file to get rid of the .VAP
  486.      extension, or delete the file entirely. Since BROUTER has no hooks
  487.      into the bindery, there is no danger in doing this.
  488.  
  489. Always use "BSETUP - Remove" to get rid of BSERVER.VAP. If it is deleted
  490. from the SYSTEM directory in any other way, it will not be removed from the
  491. bindery. "BSETUP - Remove" will delete BSERVER.VAP and BROUTER.VAP (if
  492. present) from the SYSTEM directory, and remove BSERVER from the bindery.
  493.  
  494. In the NLM environment:
  495.  
  496.  o    NetWare SQL must be unloaded before BROUTER and,
  497.  
  498.  o    BROUTER must be unloaded before BSPXCOM and Btrieve.
  499.  
  500. This can be accomplished from the server in either of two ways:
  501.  
  502.  1.  Use the provided .NCF files:
  503.  
  504.  :NSSTOP
  505.  :UNLOAD BROUTER
  506.  :BSTOP
  507.  
  508.  2.  Manually unload the following:
  509.  
  510.  :UNLOAD NSSPXCOM
  511.  :UNLOAD NWSQL
  512.  :UNLOAD BROUTER
  513.  :UNLOAD BSPXCOM
  514.  :UNLOAD BTRIEVE
  515.  
  516.  
  517. Technical Insights: Getting Object Connection Numbers
  518.  
  519. You should note that the GetObjectConnectionNumbers function call will
  520. return successfully, even if you pass it a bad Object Name.  With all other
  521. functions using the bindery calls ObjectName and ObjectType, you typically
  522. get a NO_SUCH_OBJECT (0xFC) return code.
  523.  
  524. With GetObjectConnection-Numbers, this is not the case. This call only
  525. checks for  the number of current connections for the object.  If the
  526. GetObjectConnectionNumbers call returns 0,  assume that the object is not
  527. logged in or the name is bad.
  528.  
  529.  
  530.  Technical Insights:
  531.  Btrieve VAP v5.10 Internal Error Message
  532.  
  533. With the new Btrieve VAP v5.10, if you specify a value of 0 for any of the
  534. parameters in BSETUP while loading Btrieve, the following message will
  535. appear:
  536.  
  537. BSER 2.00 - 5.10 - Internal Error. 0 Memory Allocation.
  538.  
  539. This message is purely informational. Btrieve is just notifying you that it
  540. has not reserved any space for one of the functions which it is capable of
  541. performing. Calling on one of these functions will result in a status code,
  542. which will vary, depending on the function called.
  543.  
  544. For example, if the Number of Transactions = 0 in BSETUP, and a Begin
  545. Transaction (19) is issued, a Status 36 (Transaction Error) will be
  546. returned. If the Number of Locks = 0 in BSETUP, and a lock of some sort
  547. (2xx) is applied, a Status 81 (Lock Error) will be returned.
  548.  
  549.  
  550.  Technical Insights:
  551.  Valid File Handles in the VAP Environment
  552.  
  553. Zero is a valid file handle in a VAP. Therefore, make the open function you
  554. write return a -1, and do not assume that zero is invalid.
  555.  
  556.  i.e.
  557.       if (handle > 0 ) {Okay}
  558.  
  559.  you should instead use:
  560.  
  561.       if (handle >= 0) {Okay}
  562.  
  563.  
  564. Technical Insights:  Btrieve v5.10 Error Checking
  565.  
  566. The documentation for Btrieve 5.10 describes a change in how Btrieve
  567. handles error checking. Btrieve now returns non-zero status codes in two
  568. cases where v5.0 returned status 0:
  569.  
  570.  1.  When you perform a Get operation with one key and then an update using
  571.      a different key number. Btrieve 5.10 will return a status 7 (Different
  572.      Key Number). With Btrieve v5.0, it would have returned a status 0.
  573.  
  574.  2.  Doing a Get Next right after an Open will return a status 8 (Invalid
  575.      Positioning). Btrieve v5.0 would have returned a record (undetermined)
  576.      with status 0 in this case.
  577.  
  578.  
  579. Technical Insights: Btrieve v5.10 Documentation Error
  580.  
  581. In version 5.10 of Btrieve for DOS, the documentation states that if you
  582. are using the product in a "client-based" environment, DOS v2.0 or above is
  583. required. In reality, Btrieve checks for DOS versions and will return the
  584. message, "Incorrect DOS version", if you attempt to load it with any
  585. version of DOS which preceeded v3.1.
  586.  
  587. This is a DOCUMENTATION error, not a product error. It has been reported
  588. and will be corrected with the next printing of the manual.
  589.  
  590. Technical Insights: GetNextExtended in Btrieve
  591.  
  592. When specifying the number of records to be skipped which do not satisfy
  593. the filter condition on a GetNextExtended, you can specify the value 0. In
  594. this case, "a system-determined value will be used" (page 4-59, Btrieve
  595. Programmer■s Manual, for v.5.10). This value is 127 for Btrieve for DOS,
  596. and 1023 when using the VAP or NLM.
  597.  
  598.  
  599. Problem Listings
  600.  
  601. Patches  can be downloaded from NetWire, or acquired from Novell Austin at
  602. no charge. To acquire a patch diskette from us, contact Developer Support
  603. via phone, mail, or FAX (see page 11). Please specify the name of each
  604. product for which you would like patches.
  605.  
  606. BROUTER.NLM v5.11 Patches
  607.  
  608.  1.  This patch ensures that there will be only one connection per server
  609.      and serializes client threads to avoid an as-yet-unexplained SPX hang.
  610.  
  611.  2.  This patch fixes the SPX hang mentioned above and may be used instead
  612.      of patch #1 (using both patches is equivalent to using just #1). This
  613.      allows up to three Brouter-Btrieve connections to a given server and
  614.      may result in improved performance in some cases.
  615.  
  616. Btrieve v5.10 Patches
  617.  
  618.  1-26.     Refer to earlier issues of BULLETS.
  619.  
  620.  27. Btrieve (NLM, VAP, Brequest) This patch fixes a problem in which, for
  621.      data-only files, Btrieve returns data to the key buffer after Get
  622.      Direct, Update, Insert and Extended Insert. This patch MUST be made
  623.      both to the VAP or the NLM and to the Requester. The VAP (or NLM)
  624.      sends a flag to the Requester, so if you do not patch the Requester,
  625.      the flag will not be understood.
  626.  
  627.  28. Btrieve (DOS) This patch corrects a timing-related bug which causes
  628.      Btrieve (DOS) files to become corrupted when one workstation opens a
  629.      file while another workstation simultaneously closes that same file
  630.      from an accelerated processing mode.
  631.  
  632.  29. Btrieve (NLM) This patch corrects a problem which prevents a file,
  633.      opened on the server by Btrieve, from being open for read-only access
  634.      by a non-Btrieve application, even though the file has the Shareable
  635.      attribute set by the NetWare FLAG utility.
  636.  
  637.  30. Btrieve (VAP, DOS) This patch fixes a bug causing Btrieve to return an
  638.      erroneous status 26 when a supplemental index with 8 segments is added
  639.      to a data-only Btrieve file of size 512 bytes.
  640.  
  641.  31. Btrieve (DOS) This patch prevents Btrieve from returning an erroneous
  642.      status 83 when it performs Insert Extended operations within a
  643.      transaction.
  644.  
  645.  32. Btrieve (NLM) This patch fixes a bug in NetWare SQL. Apply this patch
  646.      only AFTER applying patch #27.
  647.  
  648.  33. Btrieve (VAP, NLM) This patch fixes a bug which causes the user's key
  649.      buffer to be overwritten with garbage after a Get Direct returns a
  650.      status 22 (user's data buffer too small). This patch also fixes a bug
  651.      which prevents the NLM from returning a key value after a Get Direct
  652.      returns a status 22, and the user's data buffer IS long enough to at
  653.      least receive the fixed length portion (including the keys) of the
  654.      record. NOTE: This patch will only work if patch #27 has been applied
  655.      to the VAP or the NLM and to BREQUEST.EXE.
  656.  
  657.  34. Btrieve (VAP) This patch fixes a bug which causes a GPI crash on the
  658.      VAP's server when the application uses the Extended Insert function
  659.      and passes a data buffer which is larger than the "largest record
  660.      size" parameter configured by BSETUP.
  661.  
  662.  35. Btrieve (DOS) This patch fixes a bug which causes Btrieve to make an
  663.      unneeded pre-image file, when the very first operation requested after
  664.      Btrieve is loaded is a Create.
  665.  
  666.  36. Btrieve (DOS) This patch fixes a bug which causes Btrieve to crash (or
  667.      show other unpredictable symptoms) while updating a record retrieved
  668.      with a Get Direct or Step (no key) operation when:
  669.  
  670.      (1) there has been no Insert or Get (using a key) since opening the
  671.      file, AND (2) prior to the file's Open operation, the file's
  672.      positionblock array contained values other than binary zeros.
  673.  
  674.  37. Btrieve (NLM, DOS, and VAP) This patch fixes a bug which causes
  675.      Btrieve to return an erroneous status 2 when deleting a record from a
  676.      file with a supplemental index. This bug occurs most often when only a
  677.      few records have been inserted since the creation of the supplemental
  678.      index. In the VAP or DOS versions, the bug occurs only if the
  679.      supplemental index was created with the NLM.
  680.  
  681.  38. BTRTOOLS - (Windows Btrieve Utilities) This patch fixes a bug in the
  682.      Description File Utility which drops the first word of comments from
  683.      the description file.
  684.  
  685.  39. Btrieve (OS/2) This patch fixes a bug which causes a segmentation
  686.      violation during re-initialization through BTRVINIT().
  687.  
  688.  40. Btrieve (VAP) This patch fixes an error in patch #34 which causes a
  689.      status 39 to be returned to XQLI during start-up.
  690.  
  691.  41. Btrieve (OS/2 & Windows) This patch fixes the same problem described
  692.      in patch 35.
  693.  
  694.  42. Btrieve (OS/2 & Windows) This patch fixes the problem described in
  695.      patch 36.
  696.  
  697.  43. Btrieve (OS/2 & Windows) This patch fixes the same problem described
  698.      in patch 37. In Btrieve for Windows and Btrieve for OS/2, this bug
  699.      will only occur when using a file created by the Btrieve NLM.
  700.  
  701.  44. Btrieve (DOS & OS/2) This patch fixes a bug which causes lock errors.
  702.      When a file is opened in exclusive mode, the application repeats the
  703.      following sequence several times, each time using a different record:
  704.      it retrieves a record using a multiple record lock bias (300 or 400)
  705.      and then updates or deletes that record. Eventually, a Status 81 (Lock
  706.      Error) is returned. The number of times the sequence will repeat
  707.      before returning the Status 81 is determined by the user's
  708.      specification of the maximum number of multiple locks (/L:).
  709.  
  710.      For DOS Btrieve, this bug will also appear if the file is opened in
  711.      other modes, provided that the file is on a non-network drive and
  712.      SHARE.EXE is not loaded.
  713.  
  714.  45. BTRTOOLS (Windows) This patch fixes a bug in the Description File Edit
  715.      Utility which requires File Information key count to match the total
  716.      number of key segments, instead of the total number of keys.
  717.  
  718.  46. Btrieve (DOS) This patch fixes a bug which prevents Btrieve from
  719.      returning a status code 83 when a record is updated but not read
  720.      inside a transaction.
  721.  
  722. Unresolved Xtrieve PLUS v4.01 Problems
  723.  
  724.  99. (DOS, OS/2) When an INTEGER with a mask which has decimal places is
  725.      translated out to SDF/DIF files, the value goes out scaled according
  726.      to the mask. However, when the value is translated back in from the
  727.      SDF/DIF file, it is not unscaled before insertion into the data file.
  728.  
  729.      Thus, a value of 345 with a mask of ZZZ.99 will be translated out as
  730.      3.45, but when the value is translated back in, it will have a value
  731.      of 3 (regardless of the mask). Xtrieve should use the mask when
  732.      translating out AND in. Provided the mask is still ZZZ.99, the value
  733.      should be translated in as 345.
  734.  
  735. Xtrieve PLUS v4.01a Patches
  736.  
  737.  1-97.    Refer to earlier issues of BULLETS
  738.  
  739.  98. This patch fixes a bug in which, during a Modify All (or Remove All),
  740.      Xtrieve PLUS attempts to start a transaction on the view, regardless
  741.      of the setting of the Lock flag from the configuration file.
  742.  
  743.  100.This patch fixes a bug qhich causes Xtrieve PLUS to issue a status 11
  744.      when you try to create a dictionary.
  745.  
  746.  101.This patchfixes a bug which causes Xtrieve PLUS to respond incorrectly
  747.      with the message, "Dictionary is empty." when VIEW.DDF contains more  
  748.      than 254 view definitions and you try to recall or remove a view. The
  749.      store command functions properly, however.
  750.  
  751.  
  752. Novell Education
  753.  
  754. Novell Education now offers classes for many of the Development Products;
  755. including, Btrieve, XQL, Xtrieve and NetWare Client APIs. These classes are
  756. designed to give participants a complete introduction to the powerful
  757. features of Novell■s development tools and services. Classes are formatted
  758. to allow nearly 50% of the class time to be spent in hands-on activities.
  759.  
  760. 901 - Programming with NetWare Client APIs.  The price for this three-day
  761. course is $1095 per person.
  762.  
  763.      January 8-10        Orlando, FL
  764.  
  765. 920 - Programming with Network Communication Services. 901 is a
  766. prerequisite for 920. The price for this one-day class is $295 per person.
  767.  
  768.      January 11          Orlando, FL
  769.  
  770. 905 - Programming with Btrieve The cost to attend this three-day class is
  771. $895 per person.
  772.  
  773.      December 4-6        Orlando, FL
  774.  
  775.      January 8-10   Orange County, CA
  776.  
  777. 907 - Xtrieve Plus The price for this two-day course is $595 per person.
  778.  
  779.      January 8-9         Sunnyvale, CA
  780.  
  781. 910 - Programming with XQL The price for this three-day class is $895 per
  782. person.
  783.  
  784.      January 15-17       Dallas, TX
  785.  
  786. Classes are currently available in the U.S. and Canada.
  787.  
  788. International classes will be available in the future. To register or
  789. obtain information on all classes, please call (800) 233-3382. 
  790.  
  791. International customers interested in attending classes held in the U.S or
  792. Canada should call (801) 537-8850 or your local Novell office.
  793.  
  794.  
  795. New Releases: NetWare C Interface for DOS v1.2
  796.  
  797. NetWare C Interface for DOS v1.2 started shipping in October.  The most
  798. visible enhancements are newly-added C function calls that provide access
  799. to the Print Server services offered by NetWare 386. These new function
  800. calls give developers greater flexibility in specifying and maintaining
  801. print services on the network. Other network service functions that have
  802. been enhanced include the Diagnostic Services, Directory Services, File
  803. Services, and Miscellaneous Services groups.
  804.  
  805. The documentation has been significantly improved, with the addition of
  806. helpful appendices and icons to indicate function call compatibility
  807. between 286 and 386 architectures/systems. Additionally, the C Interface
  808. for DOS Technical Overview now includes an example diskette which
  809. demonstrates call usage in programs. Source code and libraries are included
  810. for four C Compilers: Microsoft C v6.0 and v5.1, Borland Turbo C v2.0,
  811. WATCOM C v8.0 and v7.0, and Lattice C v6.05.
  812.  
  813. The upgrade from v1.1 to v1.2 is available through 1-800-RED-WORD for
  814. domestic customers or (512) 346-8380 for international customers. Please
  815. direct all FAX inquiries to (512) 345-7478.
  816.  
  817.  
  818. New Releases: Network C for DOS v2.0
  819.  
  820. In October, the second release of Novell■s 16-bit C compiler for DOS began
  821. shipping. Many new features and enhancements have been made in the new
  822. version. The most immediately apparent change is in the name, which now
  823. more accurately reflects the purpose of this product. The first release was
  824. named C Network Compiler v1.0. The new release is called Network C for DOS
  825. v2.0, indicating that the product is a full C language environment for
  826. writing DOS-based network applications.
  827.  
  828. More tangible enhancements to v2.0 include:
  829.  
  830.  o   WATCOM v8.0 Compiler and Tools
  831.  o   Embedded SQL, so that SQL statements can be coded directly
  832.  o   NetWare C Interface for DOS v1.2, including function calls for NetWare
  833.      386 services
  834.  o   Completely rewritten Network Application Tutorial with source code
  835.      examples
  836.  o   Protected-mode compiler for writing larger programs
  837.  
  838. Upgrades are available to the following:
  839.  
  840.  1.  Customers who own C Network Compiler v1.0. (Upgrades are free to
  841.      anyone who purchased v1.0 between 9/17/90 and 10/17/90.)
  842.  
  843.  2.  Customers who own the NetWare Programmer's Workbench, which included
  844.      the v1.0 release of the compiler kit.
  845.  
  846. Both the full package and the upgrade are available by calling
  847. 1-800-RED-WORD for domestic customers or (512) 346-8380 for international
  848. customers.Please direct all FAX inquiries to (512) 345-7478.
  849.  
  850.  
  851. Fun & Facts
  852.  
  853. Test your 'developing' skills with the various PROFESSIONAL DEVELOPMENT
  854. SERIES products you may be using by taking our F & F quiz.  Have fun and
  855. good luck!  (See page 11 for answers.)
  856.  
  857.  1.    (Btrieve) What is the purpose of the Btrieve data-only files?
  858.  
  859.  
  860.  a)  To have the ability to create indexes on the fly via Create
  861.      Supplemental Index (operation 31).
  862.  b)  To store your data in chronological order of insertion in a Btrieve
  863.      file.
  864.  c)  To have the ability to use your Btrieve data in a word processor.
  865.  d)  A & B only.
  866.  
  867.  2.  Btrieve) Which Btrieve operation can you use to access Btrieve data
  868.      only files?
  869.  
  870.  a)  Get operations.
  871.  b)  Step operations.
  872.  c)  Read operations.
  873.  d)  Scan operations.
  874.  
  875.  3.  (Xtrieve PLUS) Which text directive should be used to print a page
  876.      number in a report?
  877.  
  878.  a)  %page
  879.  b)  %number
  880.  c)  @page
  881.  d)  @number
  882.  
  883.  4.  (Xtrieve PLUS) What function should you perform (which function-key
  884.      should you press) while recording a command file, in order to allow
  885.      the user to make a menu selection?
  886.  
  887.  a)  PROMPT for command input (F5)
  888.  b)  PAUSE for command input (F3)
  889.  c)  Temporarily SUSPEND execution (Alt-F9)
  890.  d)  SHOW command file text window (F9)
  891.  
  892.  5.  (Xtrieve PLUS) What is the default function-key to chain command files
  893.      in Xtrieve?
  894.  
  895.  a)  F8
  896.  b)  Shift-F7
  897.  c)  Alt-F6
  898.  d)  Ctrl-F3
  899.  
  900.  6.  (XQL/NetWare SQL) The latest release allows an application to intermix
  901.      XQL Manager and Primitive calls. If an application issues an XQLCursor
  902.      followed by an XQLCompile of "SELECT * FROM <viewname>", which of the
  903.      following Primitive functions should NOT be used?
  904.  
  905.  a)  xFetch
  906.  b)  xDescribe
  907.  c)  xFree
  908.  d)  xField
  909.  
  910.  7.  (XQL/NetWare SQL) Scalar functions (a new feature in v2.11) can be
  911.      used in expressions at the XQLM or XQLP API level. Which of the
  912.      following is not a valid scalar function for string manipulation?
  913.  
  914.  a)  LENGTH
  915.  b)  REVERSE
  916.  c)  RIGHT
  917.  d)  UPPER
  918.  
  919.  8.  (Btrieve) On a 386 server, if you have NetWare SQL, Btrieve, and
  920.      Brouter loaded and you want to access Btrieve files on another server
  921.      running Btrieve, you must also load Brouter on that server.
  922.  
  923.  a)  FALSE - The Brouter on your server will route the request directly to
  924.      Btrieve on the other server.
  925.  b)  TRUE
  926.  
  927.  9.  (Btrieve) What is the earliest version of Microsoft C you can use in
  928.      order to take advantage of Embedded SQL?
  929.  
  930.  a)  6.0
  931.  b)  4.0
  932.  c)  5.0
  933.  d)  5.1
  934.  
  935.  10. (Btrieve) When specifying an Alternate Collating Sequence on a BTRIEVE
  936.      CREATE(14), how should the alternate sequence be specified?
  937.  
  938.  a)  By placing the filename in the databuffer following the key
  939.      specifications.
  940.  b)  By dumping the alternate collating file into the databuffer, following
  941.      the key specifications.
  942.  c)  By placing the filename at the beginning of the databuffer.
  943.  
  944.  11. (Btrieve) When specifying data compression, 
  945.  
  946.  a)  the record must be variable length.
  947.  b)  the record must be fixed length.
  948.  c)  the record can be fixed or variable length.
  949.  
  950.  12. (Xtrieve PLUS) What is the Plus in Xtrieve PLUS?
  951.  
  952.  a)   An Xtrieve text editor
  953.  b)   Xtrieve + patches.
  954.  c)   The Report Option.
  955.  d)   The ability to export command files as Lotus 1-2-3 worksheets.
  956.  
  957.  13. (Xtrieve PLUS) Where does a FIELD/MODIFY ALL command get the
  958.      information it needs to perform a modification?
  959.  
  960.  a)  The /k option when starting Xtrieve.
  961.  b)  A user-defined field.
  962.  c)  The MODIFY.ALL file.
  963.  d)  Xtrieve will prompt you for the data.
  964.  
  965.  
  966. Professional Developers' Forums
  967.  
  968. The Professional Developers■ Forum is an informal setting where systems
  969. developers can talk about important issues face-to-face with Novell
  970. Austin■s development/support staff and with each other. Share your ideas
  971. and software development expertise, discuss current issues and problems,
  972. and learn about the latest tools and techniques for creating NetWare
  973. applications.
  974.  
  975. The sessions are from 8:30 a.m. until 4:30 p.m. The cost to attend is $95
  976. per person, which includes lunch. The forums scheduled for the next few
  977. months are:
  978.  
  979.  December 5     Toronto, ONT
  980.  January 9      Austin, TX
  981.  January 30     Seattle, WA
  982.  February 13    Boston, MA
  983.  
  984. For more information or to register, call 1-800-RED-WORD or (512) 346-8380.
  985. Reservations cancelled less than five working days prior to the scheduled
  986. Forum will forfeit the entire registration fee. If you need to reschedule,
  987. do so within five working days. You may reschedule only once.
  988.  
  989.  
  990. Helpful Hints When Calling Novell Austin
  991.  
  992. If you need telephone assistance with a development problem, please call
  993. Developer Support at 1-800-SAY-HELP. International customers may call (512)
  994. 346-8380 or contact their local Novell office. Be prepared to give the
  995. technical support operator your Direct Connect authorization number. This
  996. number is required to direct your call to a software support engineer.
  997.  
  998. If you have just purchased a new Professional Development Series product,
  999. you may register for 30 days of free telephone support. Please provide the
  1000. serial number of your new product as well as registration information to
  1001. the technical support operator. You must be registered before your call can
  1002. be directed to a software support engineer.
  1003.  
  1004. If you would like to request a patch diskette, tell the technical support
  1005. operator the name of each product for which you need patches. International
  1006. customers may contact their local Novell office. Patches are also available
  1007. on NetWire.
  1008.  
  1009. If you are calling to place an order, or for product information, please
  1010. dial 1-800-RED-WORD. International customers may contact their local Novell
  1011. authorized dealer or call (512) 346-8380. Novell Austin accepts MasterCard,
  1012. Visa and American Express credit cards. 
  1013.  
  1014. Current Versions
  1015.  
  1016.  NetWare 386                   3.10a
  1017.  
  1018.  NetWare 286
  1019.       SFT-II                   2.15c
  1020.       Advanced                 2.15c
  1021.       ELS-I                    2.12
  1022.       ELS-II                   2.15c
  1023.  
  1024.  NetWare System Interfaces
  1025.       C Interface - DOS        1.2
  1026.       System Calls - DOS       1.0
  1027.       OS/2 Developer's Kit     1.2d
  1028.       386/ASM for NetWare 386  1.0
  1029.       NetWare System Interface
  1030.            Technical Overview  1.2
  1031.  
  1032.  NetWare RPC
  1033.       NetWare RPC for DOS      1.1
  1034.       NetWare RPC 386          1.1
  1035.  
  1036.  Network C Compilers
  1037.       Network C for DOS        2.0
  1038.       C Network Compiler/386   1.1
  1039.  
  1040.  XQL
  1041.       XQL for DOS              2.11
  1042.       XQL for OS/2             2.11
  1043.  
  1044.  NetWare SQL/386 (NLM)         2.11a
  1045.  NetWare SQL (VAP)             2.11
  1046.  
  1047.  Btrieve
  1048.       Btrieve for DOS          5.10a
  1049.       NetWare Btrieve (VAP)    5.10a
  1050.       NetWare Btrieve 386 (NLM)     5.10
  1051.       Btrieve for OS/2         5.10
  1052.       Btrieve for Windows      5.10
  1053.  
  1054.  Xtrieve PLUS
  1055.       Xtrieve PLUS for DOS     4.01a
  1056.       Xtrieve PLUS for OS/2    4.01
  1057.  
  1058.  Report Executive
  1059.       Report Executive
  1060.            for DOS             4.01a
  1061.       Report Executive
  1062.            for OS/2            4.01a
  1063.  
  1064.  
  1065. FUN & FACTS ANSWERS
  1066.  
  1067.  1.   d
  1068.  2.   b
  1069.  3.   c
  1070.  4.   c
  1071.  5.   b
  1072.  6.   c
  1073.  7.   b
  1074.  8.   a
  1075.  9.   d
  1076.  10.  b
  1077.  11.  c
  1078.  12.  c
  1079.  13.  b
  1080.  
  1081. Professional Development Series Bullets is a publication from Novell. It is
  1082. sent free of charge to all registered Professional Development Series
  1083. product users, all Direct Connect telephone support subscribers, and to any
  1084. developers writing applications for the NetWare operating system. We
  1085. welcome any comments, questions, and suggestions for improvement you might
  1086. have about this publication.
  1087.  
  1088.  
  1089. All computer, software, or service names mentioned in this publication are
  1090. trademarks, servicemarks, or registered trademarks of their respective
  1091. holders.
  1092.